home *** CD-ROM | disk | FTP | other *** search
- /*
- * Aes rectangle utils
- * rc_copy copy grects
- * rc_equal compare two grects
- * rc_intersect check if two grects intersect, ret intersec
- * rc_union union of two grects
- * grect_to_aray convert GRECT to a vdi pxy style coordinate
- * array
- *
- * ++jrb bammi@cadence.com
- * modified: mj -- ntomczak@vm.ucs.ualberta.ca
- */
- #include <macros.h>
- #include <gemfast.h>
-
- #ifdef __DEF_ALL__
-
- #define L_rc_copy
- #define L_rc_equal
- /***
- #define L_max
- #define L_min
- ***/
- #define L_rc_inter
- #define L_grect_to
-
- #endif /* __DEF_ALL__ */
-
-
- #ifdef L_rc_copy
-
- /* rc_copy copy grects
- * always returns success
- */
- int rc_copy(GRECT *src, GRECT *dst)
- {
- *dst = *src;
- return 1;
- }
- #endif /* L_rc_copy */
-
- #ifdef L_rc_equal
-
- /* rc_equal compare two rectangles
- * returns 0 is not same
- */
- rc_equal(GRECT *p1, GRECT *p2)
- {
- return ((p1->g_x == p2->g_x) &&
- (p1->g_y == p2->g_y) &&
- (p1->g_w == p2->g_w) &&
- (p1->g_h == p2->g_h));
- }
- #endif /* L_rc_equal */
-
-
- #if 0
- #ifdef L_max
- static int max(int x, int y)
- {
- return (x > y)? x : y;
- }
- #endif /* L_max */
-
- #ifdef L_min
-
- static int min(int x, int y)
- {
- return (x > y)? y : x;
- }
- #endif /* L_min */
- #endif
-
- #ifdef L_rc_inter
-
- /*
- * rc_intersect check if two rects intersect
- * returns 0 if they do not intersect,
- * otherwise returns 1 and rect2 is set to common area
- */
- int rc_intersect(GRECT *r1, GRECT *r2)
- {
- int tx, ty, tw, th, ret;
-
- tx = max (r2->g_x, r1->g_x);
- tw = min (r2->g_x + r2->g_w, r1->g_x + r1->g_w) - tx;
- if (ret = (0 < tw)) {
- ty = max (r2->g_y, r1->g_y);
- th = min (r2->g_y + r2->g_h, r1->g_y + r1->g_h) - ty;
- if (ret = (0 < th)) {
- r2->g_x = tx;
- r2->g_y = ty;
- r2->g_w = tw;
- r2->g_h = th;
- }
- }
- return (ret);
- }
- #endif /* L_rc_inter */
-
- #ifdef L_grect_to
-
- /*
- * convert a GRECT to a pxy array
- * returns &pxy_array[0]
- */
- int *grect_to_array(GRECT *area, int *array)
- {
- int *ip = array;
-
- *ip = area->g_x;
- ip[2] = *ip;
- ip++;
- *ip = area->g_y;
- ip[2] = *ip;
- ip++;
- *ip++ += area->g_w - 1;
- *ip += area->g_h - 1;
- return (array);
- }
- #endif /* L_grect_to */
-
- /* rc_union todo */
-
- /* -eof- */
-